這是我很喜歡的主題,但今天依舊不舒服而且我隊友不安ㄌ只好先斷尾求生
InnoDB 是資料庫引擎,
因為支援 Transaction,目前是 MySQL 的預設引擎。(早期是 MyISAM)
[[這裏補張 dbms的結構圖好ㄌ]]
以我目前的認知,不同存儲引擎的差異主要在於「indexing」
有上過資料結構都知道,一堆資料如果要查詢效率高,最好是排序過。
這就是為什麼需要做索引了,
其實就只是把會常常查詢的那個 column 拿出來,並以此 column 數值來排序所有的 records。
如果再講底層一些,densed indexing 與 multilevel-indexing
今天存資料到硬碟上,根據 table schema 每條資料會佔用一定大小,
這樣查詢資料會很費時。
因此我們需要一個表紀錄 index + 屬於這個 index 的資料在哪,
而這個 index 表每條資料的大小應該會比原來的 table 小,
這樣載入到記憶體中時,同樣大小可以知道更多「資料在哪」的資訊。
所以如果今天 column 很少,或許就沒有額外做 densed indexing 的必要呢
如果資料變多,densed index 一直增加下去,O(n) 的 n 越來越大也不是辦法。
那就多增加幾層吧,類似 virtual memory 的 multi-level page table 的概念。
我覺得主要差在作用層次與目的。
而有某種程度的「排序」+「動態刪減」的資料結構,就會想到 binary tree,
B tree 和 B+ tree 可以說是 binary tree 的延伸變種。
索引說白了就是以空間換搜尋時間提升,所以不能每個 column 都做索引。
ORDER BY
/ WHERE
/ GROUP BY
)